
import com.volcengine.ark.runtime.model.completion.chat.ChatCompletionRequest;
import com.volcengine.ark.runtime.model.completion.chat.ChatMessage;
import com.volcengine.ark.runtime.model.completion.chat.ChatMessageRole;
import com.volcengine.ark.runtime.service.ArkService;
import okhttp3.ConnectionPool;
import okhttp3.Dispatcher;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.TimeUnit;

public class ChatCompletionsExampleV2 {
    static String apiKey = System.getenv("ARK_API_KEY");
    //创建一个连接池，最多允许5个空闲连接，空闲连接的最大存活时间为1秒。
    static ConnectionPool connectionPool = new ConnectionPool(5, 1, TimeUnit.SECONDS);
    //创建一个调度器，用于管理 HTTP 请求的执行。
    static Dispatcher dispatcher = new Dispatcher();
    //使用 ArkService 构建器创建一个 ArkService 实例，配置了调度器、连接池、API 密钥和基础 URL。
    static ArkService service = ArkService.builder()
            .dispatcher(dispatcher)
            .connectionPool(connectionPool)
            .apiKey(apiKey)
            .build();
   public static void main(String[] args) {
       // 打印流式请求的提示信息
       System.out.println("\n----- streaming request -----");
       // 创建一个用于存储流式聊天消息的列表
       final List<ChatMessage> streamMessages = new ArrayList<>();
       // 创建一个流式系统消息，指定消息角色为系统，并设置消息内容
       final ChatMessage streamSystemMessage = ChatMessage.builder()
               .role(ChatMessageRole.SYSTEM)
               .content("你是豆包，是由字节跳动开发的 AI 人工智能助手")
               .build();
       // 创建一个流式用户消息，指定消息角色为用户，并设置消息内容
       final ChatMessage streamUserMessage = ChatMessage.builder()
               .role(ChatMessageRole.USER)
               .content("常见的十字花科植物有哪些？")
               .build();
       // 将流式系统消息添加到流式消息列表中
       streamMessages.add(streamSystemMessage);
       // 将流式用户消息添加到流式消息列表中
       streamMessages.add(streamUserMessage);

       // 构建流式聊天完成请求，指定使用的模型和消息列表
       ChatCompletionRequest streamChatCompletionRequest = ChatCompletionRequest.builder()
               .model("ep-20250207210413-l6c9q")
               .messages(streamMessages)
               .build();
       // 发送流式聊天完成请求，处理可能的错误，并逐块打印响应内容
       service.streamChatCompletion(streamChatCompletionRequest)
               .doOnError(Throwable::printStackTrace)
               .blockingForEach(
                       choice -> {
                           // 如果响应中的选择列表不为空
                           if (choice.getChoices().size() > 0) {
                               // 打印第一个选择的消息内容
                               System.out.print(choice.getChoices().get(0).getMessage().getContent());
                           }
                       }
               );
//       service.createChatCompletion(chatCompletionRequest).getChoices().forEach(choice -> System.out.println(choice.getMessage().getContent()));
       // 请求结束需要关闭服务
//       service.shutdownExecutor();
   }
}